package com.qlzb.taskmanagement.controller.base;

import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import com.qlzb.taskmanagement.pojo.OutputWrapper;
import com.qlzb.taskmanagement.vo.base.*;

import javax.validation.Valid;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName BaseController
 * @Description TODO    基础控制器接口
 * @Authr 袁聪
 * @Date 2018-6-3 20:48
 * @Version v2.0
 */

public interface EydBaseController<QueryVo extends BaseQueryVo, FormVo extends BaseFormVo, IdVo extends BaseIdVo, IdListVo extends BaseIdListVo, ActionVo extends BaseActionVo, VerifyVo extends BaseVerifyVo> {

    /**
     * 查询对象列表页面
     * @return 展示页面: view-list
     */
    String viewList(Model model);

    /**
     * 根据查询条件，查询对象列表
     *
     * @param vo            要查询对象的查询条件
     * @return 展示页面: view-list
     */
    OutputWrapper listData(QueryVo vo);


    /**
     * 根据ID查询一条数据
     * @return 展示页面: view-one
     */
    String viewOne();

    /**
     * 根据ID查询一条数据
     *
     * @param vo            要查询对象的ID
     * @return 展示页面: view-one
     */
    OutputWrapper getOne(IdVo vo);


    /**
     * 跳转到添加页面
     *
     * @return 添加页面: add-form
     */
    String addView(Model model);


    /**
     * 添加一条数据
     *
     * @param vo            需要添加的对象
     * @param bindingResult 验证结果
     * @param model         model
     * @return 重定向到 viewList 页面
     */
    OutputWrapper addOne(@Valid FormVo vo, BindingResult bindingResult, Model model);


    /**
     * 跳转到更新页面
     *
     * @param vo            需要更新对象的ID
     * @param bindingResult 验证结果
     * @param model         model
     * @return 更新页面: edit-form
     */
    String editView(IdVo vo, BindingResult bindingResult, Model model);


    /**
     * 更新一条数据
     *
     * @param vo            需要更新的对象
     * @param bindingResult 验证结果
     * @param model         model
     * @return 重定向到 viewList 页面
     */
    OutputWrapper editOne(@Valid FormVo vo, BindingResult bindingResult, Model model);

    /**
     * 密码重置
     *
     * @param vo            需要更新对象的ID
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    OutputWrapper editPassword(IdVo vo, BindingResult bindingResult, Model model);


    /**
     * Ajax Post 根据ID删除一条数据
     *
     * @param vo            要删除对象的ID
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    OutputWrapper deleteOne(IdVo vo, BindingResult bindingResult, Model model);


    /**
     * Ajax Post 根据ID列表删除数据
     *
     * @param vo            要删除对象的ID列表
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    OutputWrapper deleteList(IdListVo vo, BindingResult bindingResult, Model model);


    /**
     * 预览视图
     *
     * @param vo            需要预览对象的ID
     * @param bindingResult 验证结果
     * @param model         model
     * @return 预览页面
     */
    String previewView(IdVo vo, BindingResult bindingResult, Model model);




    /**
     * Ajax Post 启用禁用
     *
     * @param vo            启用禁用的对象信息
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    OutputWrapper enableDisable(@Valid ActionVo vo, BindingResult bindingResult, Model model);


    /**
     * 验证数据
     *
     * @param vo            需要要做的对象
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    Map<String, Boolean> verifyData(@Valid VerifyVo vo, BindingResult bindingResult, Model model);



    /**
     * Ajax Post 修改排序
     *
     * @param vo            要修改对象的 id 和 sort
     * @param bindingResult 验证结果
     * @param model         model
     * @return 输出结果
     */
    OutputWrapper editSort(@Valid BaseSortFormVo vo, BindingResult bindingResult, Model model);



}
